#define _CRT_SECURE_NO_WARNINGS

#include<stdio.h>

//sizeof(数组名)，sizeof中单独放数组名，这⾥的数组名表⽰整个数组，计算的是整个数组的⼤⼩，
//单位是字节
//& 数组名，这⾥的数组名表⽰整个数组，取出的是整个数组的地址（整个数组的地址和数组⾸元素
//的地址是有区别的）
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	printf("%d\n", sizeof(arr));
//	printf("arr[0] = %p\n", &arr[0]);
//	printf("arr = %p\n", arr);
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//
//	printf("&arr[0]      = %p\n", &arr[0]);
//	printf("&arr[0] + 1  = %p\n", &arr[0] + 1);
//
//	printf("arr      = %p\n", arr);
//	printf("arr + 1  = %p\n", arr + 1);
//
//	printf("&arr     = %p\n", &arr);
//	printf("&arr + 1 = %p\n", &arr + 1);
//	return 0;
//}

//使⽤指针访问数组
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int i = 0;
//	for (i = 0; i < sz; i++) {
//		scanf("%d", &arr[i]);
//	}
//
//	for (i = 0; i < sz; i++) {
//		printf("%d ", arr[i]);
//	}
//	return 0;
//}

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz = sizeof(arr) / sizeof(arr[0]);
//	int* p = arr;//&arr[0]
//	int i = 0;
//	for (i = 0; i < sz; i++) {
//		scanf("%d", p + i);
//	}
//
//	for (i = 0; i < sz; i++) {
//		printf("%d ", *(p + i));
//	}
//	return 0;
//}



// 数组传参传递的是数组⾸元素的地址。
//void test(int arr[10]) {
//	int sz2 = sizeof(arr) / sizeof(arr[0]);
//	printf("sz2 = %d\n", sz2);
//}
// 
// sz1 = 10
// sz2 = 1

//void test(int* arr, int sz)
//{
//	int i = 0;
//	for (i = 0; i < sz; i++) {
//		printf("%d ", *(arr + i));//(arr[i])
//	}
//}
//
//
//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int sz1 = sizeof(arr) / sizeof(arr[0]);
//	printf("sz1 = %d\n", sz1);
//	test(arr, sz1);
//	return 0;
//}


//⼆级指针
//int main()
//{
//	int a = 10;
//	int* pa = &a;
//	int** ppa = &pa;
//	printf("%d\n", **ppa);
//
//	**ppa = 30;
//	printf("%d\n", **ppa);
//	return 0;
//}


// 指针数组
// 指针数组模拟⼆维数组
//int main()
//{
//	int arr1[5] = { 1,2,3,4,5 };
//	int arr2[5] = { 2,3,4,5,6 };
//	int arr3[5] = { 3,4,5,6,7 };
//	int* irr[3] = { arr1, arr2, arr3 };
//	int i = 0;
//	int j = 0;
//	for (i = 0; i < 3; i++) {
//		for (j = 0; j < 5; j++) {
//			printf("%d ", irr[i][j]);
//		}
//		printf("\n");
//	}
//	return 0;
//}


//字符指针变量 char*

//#include <stdio.h>
//
//int main()
//{
//    char str1[] = "hello bit.";
//    char str2[] = "hello bit.";
//
//    const char* str3 = "hello bit.";
//    const char* str4 = "hello bit.";
//
//    if (str1 == str2)
//        printf("str1 and str2 are same\n");//1
//    else
//        printf("str1 and str2 are not same\n");//2
//
//    if (str3 == str4)
//        printf("str3 and str4 are same\n");//3
//    else
//        printf("str3 and str4 are not same\n");//4
//
//    return 0;
//}
//运行结果 2、3

//数组指针变量

//int main()
//{
//	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//	int (*p)[10] = &arr;
//	return 0;
	// arr-- int* arr + 1 跳过4个字节
	//&arr[0]  -- int*       &arr[0]+1跳过4个字节
	//&arr -- int(*)[10]     &arr+1 跳过40个字节
}